home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / mcu / float09.arc / COMPARE.SA < prev    next >
Text File  |  1987-03-04  |  14KB  |  760 lines

  1.  NAM COMPARE
  2.  TTL FLOATING PT. COMPARE FUNCTION
  3. *
  4. * LINKING LOADER DEFINITIONS
  5. *
  6.  XDEF  MAGCMP,INFAR2,INFAR1,CMPINF,NANCMP
  7.  XDEF  CMPZER,ARG1UN,ARG2UN,BOTHUN
  8. *
  9.  XREF  SNORM,LNORM,ENORM,ROUND,IOPSET
  10. *
  11. * REVISION HISTORY:
  12. *   DATE    PROGRAMMER     REASON
  13. *
  14. *  23.MAY.80    G. STEVENS     ORIGINAL
  15. *  01.JUL.80    G. STEVENS     FIX CMP. STEP2 SO THAT IT
  16. *                   DOESN'T BOMB THE CCR.
  17. *  07.JUL.80    G. STEVENS     ADD ROUTINES FOR UNNORMALIZED
  18. *  14.AUG.80    G. STEVENS     CHANGE CONDITIONS FOR ERRUN
  19. *  19.AUG.80    G. STEVENS     ADD CODE TO HANDLE UNORMAL ZEROS
  20. *  22.AUG.80    G. STEVENS     PREDICATE CMP'S SET UNORDERED PROPERLY     RDERED PROPER
  21. *
  22.  PAG
  23. *
  24. *
  25. * HERE IS THE FUNCTION COMPARE AND ITS
  26. * SUPPORT ROUTINES. AS WITH MOST OF THE
  27. * OTHER FUNCTIONS, COMPARE MAKES USE OF
  28. * A TABLE TO CALL ONE OF SEVERAL PROCEDURES
  29. * DEPENDING ON THE TYPE OF THE INPUT OPERANDS.
  30. * EACH OF THESE SUB PROCEDURES PERFORMS THE
  31. * OPERATION AND THEN CALLS A GENERAL
  32. * PROCEDURE TO DO THE FINAL ACTION OF
  33. * EITHER RETURNING CONDITION CODES SET
  34. * TO THE RESULT OF THE COMPARE OR
  35. * AFFIRMING/DISAFFIRMING A SET OF INPUT
  36. * PREDICATES.
  37. *
  38. *
  39. * LOCAL EQUATES
  40. *
  41. * PREDICATE BIT EQUATES
  42. *
  43. UN EQU    BIT0
  44. LT EQU    BIT1
  45. EQ EQU    BIT2
  46. GT EQU    BIT3
  47. NE EQU    BIT4
  48. GE EQU    BIT3+BIT2
  49. LE EQU    BIT1+BIT2
  50. *
  51. *
  52. * CONDITION CODE EQUATES
  53. *
  54. CCGT EQU  00
  55. CCLT EQU  N
  56. CCEQ EQU  Z
  57. CCUN EQU  C
  58. *
  59. NCCGT EQU  N+Z+V+C
  60. NCCLT EQU  Z+V+C
  61. NCCEQ EQU  N+V+C
  62. NCCUN EQU  N+Z+V
  63. *
  64. *******************************************************************
  65. *
  66. * PROCEDURE A:
  67. *
  68. * NON SPECIAL CASE COMPARE
  69. *
  70. * PROCEDURE MAGCMP
  71. *
  72. *   MAGCMP DOES THE NON-SPECIAL CASE COMPARES
  73. * IT FIST LOOKS AT THE SIGNS OF THE OPERANDS
  74. * TO SEE IF THEY TELL THE STORY, AND THEN, IF
  75. * NECESSARY COMPARES THE MAGNITUDES OF ARG1
  76. * ARG2.
  77. *
  78. * CHECK THE SIGNS OF THE ARGUMENTS
  79. *
  80. MAGCMP LDA  ARG1,U     SIGN ARG1
  81.  EORA  ARG2,U         SIGN ARG2
  82.  IFCC LT           SIGNS NOT THE SAME
  83.    LDA    ARG1,U
  84.    IFCC  LT           ARG1 NEGATIVE
  85.      LDB  #BIT1        SET  <
  86. *
  87.    ELSE
  88.      LDB  #BIT3        SET  >
  89. *
  90.    ENDIF
  91. *
  92. * ELSE IF THE SIGNS ARE THE SAME WILL
  93. * HAVE TO DO A MAGNITUDE ON ARG1 AND ARG2
  94. *
  95.  ELSE L            SIGN ARE SAME
  96.    LDD    EXP1,U
  97.    CMPD  EXP2,U        COMPARE EXPONENTS
  98.    IFCC  NE         EXPONENTS UNEQUAL
  99.      PSHS  CC           SAVE CC REG.
  100.      LDA  ARG1,U    CHECK SIGN
  101. *
  102. * IF THE SIGN OF THE ARGUMENTS IS POSITIVE
  103. * THEN ASSIGN PREDICATES AS THE CONDITION
  104. * CODES INDICATE.
  105. *
  106.      IFCC  GE       SIGN BOTH POSITIVE
  107.        PULS  CC      GET ORIGINAL CC INFO
  108.        IFCC   GT
  109.      LDB  #BIT3    SET  >
  110. *
  111.        ELSE
  112.      LDB  #BIT1    SET  <
  113. *
  114.        ENDIF
  115. *
  116. * ELSE IF SIGNS ORIGINALLY BOTH NEGATIVE
  117. * THEN CODITION CODES ARE OPPOSITE.
  118. *
  119.      ELSE        SIGNS BOTH NEGATIVE
  120.        PULS  CC       GET OSIGINAL CC INFO
  121.        IFCC  GT
  122.      LDB  #BIT1    SET  <
  123. *
  124.        ELSE
  125.      LDB  #BIT3    SET  >
  126. *
  127.        ENDIF
  128. *
  129.      ENDIF         SIGNS POSITIVE
  130. *
  131.    ELSE          EXPONENTS EQUAL
  132. *
  133. * SET UP THE COMPARE
  134. *
  135.      LEAX  FRACT1,U
  136.      LEAY  FRACT2,U
  137.      CLRB
  138.      LDA  B,X      INITIALIZE A REG.
  139. *
  140. * COMPARE MAGNITUDES
  141. *
  142.      WHILE  A,EQ,(B,Y)
  143.        IF  B,GE,#(ARGSIZ-4)
  144.      BRA  AREQU
  145.        ENDIF
  146.        INCB
  147.        LDA  B,X
  148.      ENDWH
  149. *
  150. *
  151. AREQU EQU  *
  152. *
  153.      PSHS  CC         SAVE CC REG.
  154. *
  155. * BASED ON THE CONDITION CODES AND SIGN
  156. * OF THE ARGUMENTS, GET PREDICATE BITS.
  157. *
  158. * IF B CONTAINS ( ARGSIZ-4 ) THE N THE
  159. * ARE EQUAL.
  160. *
  161.      IF  B,GE,#(ARGSIZ-4)
  162.        LDB  #BIT2     SET =
  163.        LEAS  1,S      RESTORE STACK
  164. *
  165.      ELSE
  166.        LDA  ARG1,U      CHECK SIGN
  167. *
  168. * IF THE SIGN OF THE ARGUMENTS IS POSITIVE
  169. * THEN ASSIGN PREDICATES AS THE CONDITION
  170. * CODES INDICATE.
  171. *
  172.        IFCC  GE      SIGN BOTH POSITIVE
  173.      PULS  CC      GET ORIGINAL CC INFO
  174.      IFCC    CC      ARG1 >  ARG2
  175.        LDB    #BIT3      SET  >
  176. *
  177.      ELSE
  178.        LDB    #BIT1      SET  <
  179. *
  180.      ENDIF
  181. *
  182. * ELSE IF SIGNS ORIGINALLY BOTH NEGATIVE
  183. * THEN CODITION CODES ARE OPPOSITE.
  184. *
  185.        ELSE          SIGNS BOTH NEGATIVE
  186.      PULS  CC    GET OSIGINAL CC INFO
  187.      IFCC  CC       ARG1 < ARG2
  188.        LDB    #BIT1      SET  <
  189. *
  190.      ELSE
  191.        LDB    #BIT3      SET  >
  192. *
  193.      ENDIF
  194. *
  195.        ENDIF           SIGNS POSITIVE
  196. *
  197.      ENDIF         SIGNIFICANDS EQUAL
  198. *
  199.    ENDIF        EXPONENTS EQUAL
  200. *
  201.  ENDIF            SIGNS NOT THE SAME
  202. *
  203. * PROCEED TO STEP II TO EITHER SET CCR
  204. * OR AFFIRM/DISAFFIRM A PREDICATE.
  205. *
  206.  LBSR  CMPST2
  207. *
  208. *
  209. *
  210.  RTS       RETURN
  211. *
  212. *
  213. *
  214.  PAG
  215. *
  216. ******************************************************************
  217. *
  218. * PROCEDURE B:
  219. *
  220. * INFINITY AS ARG2 AND ARG1 <> NAN OR INFINITY
  221. *
  222. *
  223. * PROCEDURE  INFAR2
  224. *
  225. *   INFAR2 HANDLES THE CASE WHRER ARG2 IS
  226. * INFINITY AND ARG1 IS NOT EITHER A NAN OR
  227. * INFINITY.
  228. *
  229. * CHECK CLOSURE MODE
  230. *
  231. INFAR2 LDA  [PFPCB,U]
  232.  LSRA         CLOSURE MODE BIT
  233.  IFCC  CS    AFFINE MODE
  234.    LDA    ARG2,U
  235. *
  236. * IF AFFINE MODE AND ARG2 = PLUS INFINITY
  237. * THEN SIGNAL ARG1 > ARG2.
  238. *
  239.    IFCC  GE        ARG2 = PLUS INFINITY
  240.      LDB  #BIT1     SET  <
  241. *
  242. * ELSE IF AFFINE MODE AND ARG2 = MINUS
  243. * INFINITY THEN SIGNAL ARG1 > ARG2.
  244. *
  245.    ELSE
  246.      LDB  #BIT3     SET  >
  247. *
  248.    ENDIF
  249. *
  250. * ELSE IF IN PROJECTIVE MODE THEN SIGNAL
  251. * UNORDERED.
  252. *
  253.  ELSE        PROJECTIVE
  254.    LDB    #BIT0
  255. *
  256.  ENDIF
  257. *
  258. * PROCEED TO STEP II TO EITHER SET CCR
  259. * OR AFFIRM/DISAFFIRM A PREDICATE.
  260. *
  261.  LBSR  CMPST2
  262. *
  263.  RTS  RETURN
  264. *
  265. *
  266. *
  267.  PAG
  268. *
  269. *******************************************************************
  270. *
  271. * PROCEDURE  C:
  272. *
  273. * INFINITY AS ARG1 AND ARG2 <> NAN OR INFINITY
  274. *
  275. *
  276. * PROCEDURE  INFAR1
  277. *
  278. *    INFAR1 HANDLES THE CASE OF COMPARE WHERE
  279. * ARG1 IS INFINITY AND ARG2 IS NOT EITHER A
  280. * NAN OR INFINITY.
  281. *
  282. * CHECK CLOSURE MODE
  283. *
  284. INFAR1 LDA  [PFPCB,U]
  285.  LSRA
  286.  IFCC  CS           AFFINE MODE
  287.    LDA    ARG1,U
  288. *
  289. * IF IN AFFINE MODE AND ARG1 = PLUS INFINITY
  290. * THEN SIGNAL ARG1 > ARG2.
  291. *
  292.    IFCC  GE
  293.      LDB  #BIT3        SET  >
  294. *
  295. * ELSE IF IN AFFINE MODE AND ARG1 = MINUS
  296. * INFINITY THEN SIGNAL ARG1 > ARG2.
  297. *
  298.    ELSE
  299.      LDB  #BIT1        SET  <
  300. *
  301.    ENDIF
  302. *
  303. * ELSE IF IN PROJECTIVE MODE THEN SIGNAL UNORDERED
  304. *
  305.  ELSE              PROJECTIVE MODE
  306.    LDB    #BIT0
  307. *
  308.  ENDIF
  309. *
  310. * PROCEED TO STEP II TO EITHER SET CCR OR
  311. * AFFIRM/DISAFFIRM A PREDICATE.
  312. *
  313.  BSR  CMPST2
  314. *
  315. *
  316.  RTS      RETURN
  317. *
  318. *
  319. *
  320.  PAG
  321. *
  322. *******************************************************************
  323. *
  324. * PROCEDURE E:
  325. *
  326. * ARG1 AND ARG2 ARE BOTH INFINITY
  327. *
  328. *
  329. * PROCEDURE  CMPINF
  330. *
  331. *    CMPINF HANDLES THE CASE OF COMPARE WHERE
  332. * BOTH ARG1 AND ARG2 ARE INFINITY.
  333. *
  334. * CHECK CLOSURE MODE
  335. *
  336. CMPINF LDA  [PFPCB,U]
  337.  LSRA        CLOSURE MODE BIT
  338. *
  339. * IF IN PROJECTIVE MODE THEN SIGNAL ARG1 = ARG2
  340. *
  341.  IFCC  CC      PROJECTIVE MODE
  342.    LDB    #BIT2      SET  =
  343. *
  344. * ELSE IN PROJECTIVE AND THE SIGNS OF THE
  345. * ARGUMENTS ARE THE SAME THEN SIGNAL ARG1 = ARG2
  346. *
  347.  ELSE          AFFINE MODE
  348.    LDA    ARG1,U
  349.    EORA  ARG2,U
  350.    IFCC  GE     SIGNS EQUAL
  351.      LDB  #BIT2     SET  =
  352. *
  353. * ELSE IF SIGNS NOT THE SAME SET PREDICATE BITS
  354. * ACCORDINGLY.
  355. *
  356.    ELSE
  357.      LDA  ARG1,U
  358.      IFCC  LT         SIGN ARG1 IS NEG.
  359.        LDB  #BIT1    SET  <
  360. *
  361.      ELSE         SIGN ARG1 IS POS.
  362.        LDB  #BIT3
  363. *
  364.      ENDIF
  365. *
  366.    ENDIF     SIGNS EQUAL
  367. *
  368.  ENDIF         PROJECTIVE MODE
  369. *
  370. * PROCEED YO STEP II TO EITHER SET CC REG.
  371. * OR AFFIRM/DISAFFIRM A PREDICATE.
  372. *
  373.  BSR  CMPST2
  374. *
  375. *
  376.  RTS  RETURN
  377. *
  378. *
  379. *
  380.  PAG
  381. *
  382. *******************************************************************
  383. *
  384. * PROCEDURE F:
  385. *
  386. * EITHER ARG1 OR ARG2 IS A NAN
  387. *
  388. *
  389. * PROCEDURE NANCMP
  390. *
  391. *   NANCMP HANDLES A CMP WHERE EITHER ARG1 AND
  392. * ARG2 IS A NAN.
  393. *
  394. NANCMP LDB  #BIT0   SET UNORDERED
  395. *
  396. * PROCEED TO STEP II TO EITHER SET CC REG. OR
  397. * AFFIRM/DISAFFIRM A PREDICATE.
  398. *
  399.  BSR  CMPST2
  400. *
  401. *
  402.  RTS   RETURN
  403. *
  404. *
  405. *
  406.  PAG
  407. *
  408. ****************************************************************
  409. *
  410. * PROCEDURE  G:
  411. *
  412. * BOTH ARG1 AND ARG2 ARE ZERO
  413. *
  414. *
  415. * PROCEDURE CMPZER
  416. *
  417. *    CMPZER HANDLES THE CASE OF COMPARE WHERE
  418. * BOTH ARG1 AND ARG2 ARE ZERO.
  419. *
  420. CMPZER LDB  #BIT2  SET =
  421. *
  422. * PROCEED TO STEP II TO EITHER SET CC REG.
  423. * SO AFFIRM/DISAFFIRM A PREDICATE.
  424. *
  425.  BSR  CMPST2
  426. *
  427.  RTS    RETURN
  428. *
  429. *
  430. *
  431.  PAG
  432. *
  433. ****************************************************************
  434. *
  435. * PROCEDURE H:
  436. *
  437. *  ARG1 UNORMALIZED & ARG2 NORMALIZED
  438. *
  439. * PROCCEDURE  ARG1UN
  440. *
  441. *    ARGIUN HANDLES THE CASE OF COMPARE WHERE ARG1 IS
  442. * UNORMALIZED. ARG1 IS NORMALIZED AS FAR AS THE LOWER BOUND ON THE
  443. * EXPONENT ALLOWS.
  444. *
  445. *  ON ENTRY: U - STACK FRAME POINTER
  446. *
  447. *  ON EXIT:
  448. *  IN PREDICATE COMPARES:
  449. *    LOCATION CCREG ON THE STACCK FRAME CONTAINS THE
  450. *  CONDITION ODES AS SET BY THE COMPARE.
  451. *
  452. *  IN PREDICATE COMPARES:
  453. *    THE FIRST BYTE OF THE RESULTS FRACTION CONTAINS
  454. *  TRUE($00) OR FALSE($FF) DEPENDING ON WHETHER THE
  455. * PREDICATE WAS AFFIRMED OR DISAFFIRMED.
  456. *
  457. *    U - UNCHANGED
  458. *    X,Y,D,CC - DESTROYED
  459. *
  460. ARG1UN EQU  *
  461. *
  462. * CHOOSE ARG1
  463. *
  464.  LEAX  ARG1,U
  465. *
  466. * NORMALIZE OPERAND AND PERFORM THE COMPARE AS WITH TWO NORMALIZED
  467. * OPERANDS
  468. *
  469.  BSR  NRMCMP
  470. *
  471. *
  472.  RTS              RETURN
  473. *
  474.  PAGE
  475. *
  476. ****************************************************************
  477. *
  478. * PROCEDURE I:
  479. *
  480. *  ARG2 UNORMALIZED & ARG1 NORMALIZED
  481. *
  482. * PROCCEDURE  ARG2UN
  483. *
  484. *    ARGIUN HANDLES THE CASE OF COMPARE WHERE ARG1 IS
  485. * UNORMALIZED. ARG1 IS NORMALIZED AS FAR AS THE LOWER BOUND ON THE
  486. * EXPONENT ALLOWS.
  487. *
  488. *  ON ENTRY: U - STACK FRAME POINTER
  489. *
  490. *  ON EXIT:
  491. *  IN PREDICATE COMPARES:
  492. *    LOCATION CCREG ON THE STACCK FRAME CONTAINS THE
  493. *  CONDITION ODES AS SET BY THE COMPARE.
  494. *
  495. *  IN PREDICATE COMPARES:
  496. *    THE FIRST BYTE OF THE RESULTS FRACTION CONTAINS
  497. *  TRUE($00) OR FALSE($FF) DEPENDING ON WHETHER THE
  498. * PREDICATE WAS AFFIRMED OR DISAFFIRMED.
  499. *
  500. *    U - UNCHANGED
  501. *    X,Y,D,CC - DESTROYED
  502. *
  503. ARG2UN EQU  *
  504. *
  505. * CHOOSE ARG2
  506. *
  507.  LEAX  ARG2,U
  508. *
  509. * NORMALIZE OPERAND AND PERFORM THE COMPARE AS WITH TWO NORMALIZED
  510. * OPERANDS
  511. *
  512.  BSR  NRMCMP
  513. *
  514. *
  515.  RTS              RETURN
  516. *
  517.  PAGE
  518. ****************************************************************
  519. *
  520. * PROCEDURE J:
  521. *
  522. *  ARG2 UNNORMALIZED & ARG1 UNNORMALIZED
  523. *
  524. * PROCCEDURE  BOTHUN
  525. *
  526. *     BOTHUN HANDLES THE CASE OF COMPARE WHERE BOTH
  527. * ARG1 AND ARG2 ARE UNNORMALIZED. BOTH ARGUMENTS
  528. * ARE NORMALIZED AS FAR AS THE LOWER BOUND ON THE EXPONENT
  529. * ALLOWS.
  530. *
  531. *  ON ENTRY: U - STACK FRAME POINTER
  532. *
  533. *  ON EXIT:
  534. *  IN PREDICATE COMPARES:
  535. *    LOCATION CCREG ON THE STACCK FRAME CONTAINS THE
  536. *  CONDITION ODES AS SET BY THE COMPARE.
  537. *
  538. *  IN PREDICATE COMPARES:
  539. *    THE FIRST BYTE OF THE RESULTS FRACTION CONTAINS
  540. *  TRUE($00) OR FALSE($FF) DEPENDING ON WHETHER THE
  541. * PREDICATE WAS AFFIRMED OR DISAFFIRMED.
  542. *
  543. *    U - UNCHANGED
  544. *    X,Y,D,CC - DESTROYED
  545. *
  546. BOTHUN EQU  *
  547. *
  548. * NORMALIZE ARG1 & ARG2
  549. *
  550.  LEAX  ARG1,U
  551.  LBSR  LNORM
  552.  LEAX  ARG2,U
  553. *
  554. * NORMALIZE OPERAND AND PERFORM THE COMPARE AS WITH TWO NORMALIZED
  555. * OPERANDS
  556. *
  557.  BSR  NRMCMP
  558. *
  559. *
  560.  RTS              RETURN
  561. *
  562.  PAGE
  563. *
  564. *
  565. * PROCEDURE  NRMCMP
  566. *
  567. *    PERFORMS A MAGNITUDE COMPARE WHEN ONE OF THE OPERANDS IS
  568. * UNNORMALIZED.
  569. *
  570. * ON ENTRY: X - POINTS TO THE UNORMALIZED OPERAND
  571. *        ARG1 AND ARG2 CONTAIN THE INPUT OPERANDS
  572. *
  573. * ON EXIT: EITHER THE CONDITION CODES HAVE BEEN SET OR THE
  574. *       PREDICATES AFFIRMED/DISAFIRMED DEPENDING ON
  575. *       WHETHER OR NOT THE COMPARE IS A NON- PREDICATE
  576. *       OR PREDICATE COMPARE.
  577. *
  578. NRMCMP EQU  *
  579. *
  580. * NORMALIZE THE UNNORMALIZED ARGUMENT.
  581. *
  582.  LBSR  LNORM
  583. *
  584. * CHECK FOR BOTH ARGUMENTS BEING ZERO
  585. *
  586.  LDA  TYPE1,U
  587.  ADDA  TYPE2,U
  588.  IF  A,EQ,#04       BOTH ARGUMENTS ZERO
  589.    BSR    CMPZER
  590. *
  591. * PREFORM COMPARE AS WITH 2 NORMALIZED OPERANDS.
  592. *
  593.  ELSE
  594.    LBSR  MAGCMP
  595. *
  596.  ENDIF
  597. *
  598.  RTS           RETURN
  599. *
  600.  PAGE
  601. *
  602. *
  603. *******************************************************************
  604. *
  605. * COMPARE STEP II
  606. *
  607. * PROCEDURE CMPST2
  608. *
  609. *   CMPST2 DECIDES WHETHER THE COMPARE IS
  610. * A PREDICATE OR NON-PREDICATE COMPARE AND
  611. * EITHER SETS UP THE CONDITION CODES OR
  612. * RETURNS TRUE/FALSE DEPENDING ON THE INPUT
  613. * PREDICATES.
  614. *
  615. *
  616. *
  617. * FIRST SEE IF COMPARE IS A NON-PREDICATE OR
  618. * PREDICATE COMPARE
  619. *
  620. CMPST2 LDA  FUNCT,U    FUNCTION CODE
  621. *
  622. * IF THE COMPARE IS A PREDICATE COMPARE THEN
  623. * JUMP OVER THE CODE THAT HANDLES NON-PREDICATE
  624. * COMPARES
  625. *
  626.  IF  A,EQ,#FCPCMP
  627.    BRA    PCMP
  628. *
  629.  ELSE
  630.  IF  A,EQ,#FCTPCM
  631.    BRA    PCMP
  632. *
  633.  ENDIF
  634.  ENDIF
  635. *
  636. *
  637. *  B E G I N   NON-PREDICATE HANDLER
  638. *
  639. *
  640. * CASE( PREDICATE BITS ) TO SEE WHICH
  641. * CC BIT TO SET.
  642. *
  643.     LDA  CCREG,U            GET CALLER'S CC REG
  644.     ANDA #$F0                AND OUT PREVIOUS CONDITIONS
  645. *                    BUT SAVE E,F,H AND I BITS
  646. *
  647. * CASE OF EQUAL
  648. *
  649.    IF  B,EQ,#EQ
  650.      ORA  #CCEQ
  651. *
  652. * CASE OF LT
  653. *
  654.    ELSE
  655.      IF  B,EQ,#LT
  656.        ORA  #CCLT
  657. *
  658. *   CASE OF UNORDERED
  659. *
  660.      ELSE
  661.        IF  B,EQ,#UN
  662.      ORA  #CCUN
  663.        LDB    #ERRUN        UNOR BIT
  664.        ORB    TSTAT,U
  665.        STB    TSTAT,U
  666.       ENDIF [UNORDERED]
  667.     ENDIF [LESS THAN]
  668. *   IF CASE WAS > THEN ALL BITS = 0 (WHICH WAS THE INITIAL CONDITION)
  669.   ENDIF     CASE( PREDICATE BITS )
  670.     STA  CCREG,U     STORE MODIFIED CC'S
  671. *
  672. *
  673. *  E N D  NON-PREDICATE HANDLER
  674. *
  675. *
  676. *
  677. * BRANCH TO RETURN
  678. *
  679.  BRA RET
  680. *
  681. *
  682. *
  683. *  B E G I N  PREDICATE HANDLER
  684. *
  685. * ELSE IF THE COMPARE IS A PREDICATE COMPARE
  686. * THEN CHECK THE PREDICATE BITS AGAINST OF THE
  687. * COMPARE AND RETURN EITHER TRUE OR FALSE
  688. *
  689. PCMP EQU  *
  690. *
  691. *
  692. * CHECK PREDICATES AND SET THE NE BIT PROPERLY
  693. *
  694.    PSHS  B    SAVE B ON STACK
  695.    ANDB  #EQ         CHECK EQUAL
  696.    IFCC  EQ         NOT EQUAL
  697.      LDB  0,S
  698.      ORB  #NE         SET NOT EQUAL
  699.      STB  0,S
  700. *
  701.    ENDIF
  702. *
  703.    ANDB  TPARAM,U     CHECK PREDICATES
  704. *
  705. * IF PREDICATE TRUE THEN PUT $00 IN THE
  706. * FIRST BYTE OF THE FRACTION; OTHERWISE
  707. * IF PREDICATE IS FALSE, STORE $FF.
  708. *
  709.    IFCC  NE       PREDICATE TRUE
  710.      CLR  FRACTR,U
  711. *
  712.    ELSE     PREDICATE FALSE
  713.      LDA  #$FF
  714.      STA  FRACTR,U
  715. *
  716.    ENDIF
  717. *
  718. * IF UNORDERED IS AFFIRMED THEN SET THE UNORDERED
  719. * FLAG IN THE STATUS BYTE; ADDITIONALLY IF THE
  720. * PREDICATE IS <> THEN SET THE RESULT TO TRUE
  721. * TO GIVE THE USER THE TEST FOR A NAN I.E. IF
  722. * A <> A RETURNS TRUE THEN 'A' IS A NAN.
  723. *
  724.    PULS  A
  725.    ANDA  #BIT0         CHECK UNORDERED
  726.    IFCC  NE         UNORDERED AFFIRMED
  727.        LDA  TSTAT,U       SET UNORDERED FLAG
  728.        ORA  #ERRUN
  729.        STA  TSTAT,U
  730. *
  731.        LDA TPARAM,U
  732.        IF  A,EQ,#NE        PREDICATE IS <>
  733.      CLR  FRACTR,U        SET RESULT TRUE
  734. *
  735.        ELSE
  736.      IF  A,NE,#EQ
  737.        IF  A,NE,#UN
  738.          LDA  #06        IOP CODE
  739.          LBSR IOPSET
  740. *
  741.        ENDIF
  742.      ENDIF
  743.        ENDIF
  744. *
  745. *
  746.    ENDIF      UNORDERED
  747. *
  748. *
  749. *  E N D   PREDICATE HANDLER
  750. *
  751. *
  752. *
  753. RET RTS    RETURN
  754. *
  755. *
  756. *
  757.  PAG
  758. *
  759. *
  760.